package com.atguigu.gulimall.order.alipay;

import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.atguigu.gulimall.order.alipay.config.AlipayConfig;

/**
 * @Description
 * @Author lhj
 * @Date 2024/5/23 17:38
 */
public class AlipayTradePrecreate {

    public static void main(String[] args) throws AlipayApiException {

        /** 引用初始化方法，AlipayConfig配置链接：https://opensupport.alipay.com/support/FAQ/08d46c24-15a8-4f1c-85a0-68fdf587f813  **/
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);

        /** 实例化具体API对应的request类，类名称和接口名称对应,当前调用接口名称alipay.trade.precreate(统一收单线下交易预创建(扫码支付)) **/
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();

        JSONObject Content = new JSONObject() ;

        /****** 必传参数 ******/
        // 商户订单号,商户自定义，需保证在商户端不重复，如：20200612000001
        Content.put("out_trade_no", "20200612000001");

        // 订单标题
        Content.put("subject", "subject");

        // 订单金额，精确到小数点后两位
        Content.put("total_amount", "0.01");

        /****** 可选参数 ******/
        // 销售产品码,固定值：FACE_TO_FACE_PAYMENT
        Content.put("product_code", "FACE_TO_FACE_PAYMENT");

        // 扩展信息
        /*
         * JSONObject extendParams = new JSONObject(); // 设置服务商返佣pid
         * extendParams.put("sys_service_provider_id", "请输入服务商PID"); //
         * 花呗分期参数：hb_fq_num 代表花呗分期数，仅支持传入 3、6、12 extendParams.put("hb_fq_num",
         * "3"); // 花呗分期参数：hb_fq_seller_percent 代表卖家承担收费比例，商家承担手续费传入
         * 100，用户承担手续费传入 0 extendParams.put("hb_fq_seller_percent", "100");
         * Content.put("extend_params", extendParams);
         */

        // 封装请求参数到biz_content
        request.setBizContent(Content.toString());

        /** 异步通知地址，以http或者https开头的，商户外网可以post访问的异步地址，用于接收支付宝返回的支付结果 **/
        request.setNotifyUrl(AlipayConfig.notify_url);

        /**第三方调用（服务商模式），传值app_auth_token后，会收款至授权token对应商家账号 **/
        request.putOtherTextParam("app_auth_token", AlipayConfig.app_auth_token);

        AlipayTradePrecreateResponse response = alipayClient.execute(request);

        /** 获取接口调用结果 **/
        System.out.println(response.getBody());
    }

}